package com.xunk.system.mapper;

import com.xunk.common.core.domain.ControlDeviceParam;
import com.xunk.system.domain.SysScene;
import com.xunk.system.domain.SysSceneDevice;
import com.xunk.system.domain.SysSceneHome;
import com.xunk.system.vo.EquipmentVO;
import com.xunk.system.vo.FixSceneInfoVO;
import com.xunk.system.vo.SceneQuartzParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 场景信息Mapper接口
 * 
 * @author ruoyi
 * @date 2021-04-08
 */
public interface SysSceneMapper 
{
    /**
     * 查询场景信息
     * 
     * @param sceneId 场景信息ID
     * @return 场景信息
     */
    public SysScene selectSysSceneById(Long sceneId);

    /**
     * 查询场景信息列表
     * 
     * @param sysScene 场景信息
     * @return 场景信息集合
     */
    public List<SysScene> selectSysSceneList(SysScene sysScene);

    /**
     * 新增场景信息
     * 
     * @param sysScene 场景信息
     * @return 结果
     */
    public int insertSysScene(SysScene sysScene);

    /**
     * 修改场景信息
     * 
     * @param sysScene 场景信息
     * @return 结果
     */
    public int updateSysScene(SysScene sysScene);

    /**
     * 新增场景家庭关系表
     *
     * @param sysSceneHome 场景家庭关系表
     * @return 结果
     */
    public int insertSysSceneHome(SysSceneHome sysSceneHome);

    public int insertSysSceneHomeList(List<SysSceneHome> sysSceneHome);

    /**
     * 新增场景下设备信息
     *
     * @param sysSceneDevice 场景下设备信息
     * @return 结果
     */
    public int insertSysSceneDevice(SysSceneDevice sysSceneDevice);

    /**
     *  查询当前场景在该家庭的状态
     * @param homeId    家庭
     * @param sceneId   场景
     * @return
     */
    Integer selectSceneStatus(@Param("homeId") Long homeId, @Param("sceneId") Long sceneId);

    /**
     *  更新场景状态为生效
     * @param deviceSn    设备id
     * @param actionCmd
     * @param sceneId   场景id
     * @param status
     */
    void updateSceneHome(@Param("deviceSn") String deviceSn, @Param("actionCmd")  String actionCmd,@Param("sceneId") Long sceneId, @Param("status") String status);

    /**
     *  获取固定定时场景列表
     * @return
     */
    List<SceneQuartzParam> selectFixScene();

    /**
     *  查询场景下的设备控制详情
     * @param sceneId 场景id
     * @param homeId  家庭id
     * @return
     */
    List<ControlDeviceParam> selectSceneDetail(@Param("sceneId") Long sceneId, @Param("homeId") Long homeId);

    /**
     *  app首页的根据家庭获取的场景列表
     * @param homeId 家庭id
     * @param position  场景位置 index 首页，其他情况可以为空
     * @return
     */
    List<FixSceneInfoVO> selectSceneByHomeId(@Param("homeId") Long homeId, @Param("position") String position);

    Long selectSceneIdByCode(String code);

    ControlDeviceParam selectDeviceControlParam(@Param("deviceSn") String deviceSn,@Param("actionCmd") String actionCmd, @Param("sceneId") Long sceneId);

    void updateSceneHomeInfo(@Param("sceneId") Long sceneId,@Param("status") String status,@Param("homeId") Long homeId);

    /**
     *  更新场景的位置信息
     * @param sceneId   场景id
     * @param homeId    家庭id
     * @param flag      是否存在于首页 1是0否
     */
    void updateScenePosition(@Param("sceneId") Long sceneId, @Param("homeId") Long homeId,@Param("flag") Integer flag);

    SysScene selectSysSceneByCode(String mode);

    Long checkSceneDevice(@Param("deviceSn") String deviceSn, @Param("actionCmd")String actionCmd, @Param("sceneId")Long sceneId);

    List<EquipmentVO> selectSceneHome(@Param("code") String code, @Param("homeId") Long homeId);
}
